/*      */ package dm.jdbc.dbaccess;
/*      */ 
/*      */ import dm.jdbc.dataConvertion.Convertion;
/*      */ import dm.jdbc.util.List;
/*      */ import dm.jdbc.util.List.Node;
/*      */ 
/*      */ public class DmMsgSend
/*      */ {
/*    9 */   private int nextBufferSize = 32640;
/*      */   
/*      */   private List bufferList;
/*      */   
/*      */   private BufferNode curNode;
/*      */   
/*      */   private List.Node nextNode;
/*      */   
/*      */   private List.Node previousNode;
/*      */   
/*   19 */   byte[] initHead = new byte[64];
/*      */   
/*      */   public class BufferNode {
/*   22 */     byte[] buffer = null;
/*      */     
/*   24 */     private int len = 0;
/*      */     
/*   26 */     private int size = 0;
/*      */     
/*   28 */     private int preNodesLen = 0;
/*      */     
/*      */     int getBufferSize() {
/*   31 */       return this.size;
/*      */     }
/*      */     
/*      */     BufferNode() {
/*   35 */       this.buffer = new byte['羀'];
/*   36 */       this.size = 32640;
/*   37 */       this.len = 0;
/*   38 */       this.preNodesLen = 0;
/*      */     }
/*      */     
/*      */     BufferNode(int nodeSize) {
/*   42 */       this.buffer = new byte[nodeSize];
/*   43 */       this.len = 0;
/*   44 */       this.size = nodeSize;
/*   45 */       this.preNodesLen = 0;
/*      */     }
/*      */     
/*      */     BufferNode(byte[] destBuf) {
/*   49 */       this.buffer = destBuf;
/*   50 */       this.len = destBuf.length;
/*   51 */       this.size = this.len;
/*   52 */       this.preNodesLen = 0;
/*      */     }
/*      */     
/*      */     public int getBufferLen() {
/*   56 */       return this.len;
/*      */     }
/*      */     
/*      */     public void setBufferLen(int reallen) {
/*   60 */       this.len = reallen;
/*      */     }
/*      */     
/*      */     void reset() {
/*   64 */       this.len = 0;
/*   65 */       this.preNodesLen = 0;
/*      */     }
/*      */     
/*      */     void clear() {
/*   69 */       this.buffer = null;
/*   70 */       this.len = 0;
/*   71 */       this.size = 0;
/*   72 */       this.preNodesLen = 0;
/*      */     }
/*      */   }
/*      */   
/*      */   public DmMsgSend() {
/*   77 */     this.bufferList = new List();
/*      */     
/*   79 */     addBufferNode();
/*      */     
/*   81 */     resetCurNode();
/*      */   }
/*      */   
/*      */   public void cutBufferLen(int len)
/*      */   {
/*   86 */     while (len > 0) {
/*   87 */       int curlen = this.curNode.len;
/*   88 */       if (curlen > len) {
/*   89 */         this.curNode.setBufferLen(curlen - len);
/*   90 */         break;
/*      */       }
/*   92 */       this.curNode.reset();
/*   93 */       this.curNode = ((BufferNode)this.previousNode.data);
/*      */       
/*   95 */       this.nextNode = this.previousNode.next;
/*      */       
/*   97 */       this.previousNode = this.previousNode.previous;
/*      */       
/*   99 */       len -= curlen;
/*      */     }
/*      */   }
/*      */   
/*      */ 
/*      */   public byte[] getFromOffsetWithLen(int offset, int len)
/*      */   {
/*  106 */     BufferNode node = findNodeByOffsetForGet(offset);
/*  107 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*  109 */     byte[] tmp = new byte[len];
/*      */     
/*  111 */     int count = 0;
/*  112 */     int lenToRead = 0;
/*  113 */     while ((node != null) && (len > count)) {
/*  114 */       if (count == 0)
/*      */       {
/*  116 */         if (len - count > node.len - nodeOff) {
/*  117 */           lenToRead = node.len - nodeOff;
/*      */         } else {
/*  119 */           lenToRead = len - count;
/*      */         }
/*  121 */         System.arraycopy(node.buffer, nodeOff, tmp, count, lenToRead);
/*      */       } else {
/*  123 */         if (len - count > node.len) {
/*  124 */           lenToRead = node.len;
/*      */         } else {
/*  126 */           lenToRead = len - count;
/*      */         }
/*  128 */         System.arraycopy(node.buffer, 0, tmp, count, lenToRead);
/*      */       }
/*      */       
/*  131 */       count += lenToRead;
/*      */       
/*  133 */       if (!this.bufferList.hasNextObject()) break;
/*  134 */       node = (BufferNode)this.bufferList.nextNode();
/*      */     }
/*      */     
/*      */ 
/*      */ 
/*  139 */     return tmp;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public void replaceFromOffset(int offset, byte[] destBuf)
/*      */   {
/*  151 */     BufferNode node = findNodeByOffsetForSet(offset, 0);
/*      */     
/*  153 */     boolean included = false;
/*  154 */     int destLen = destBuf.length;
/*  155 */     if (node.size >= offset + destLen) {
/*  156 */       System.arraycopy(destBuf, 0, node.buffer, offset, destLen);
/*  157 */       node.len = (offset - node.preNodesLen + destBuf.length);
/*  158 */       included = true;
/*      */     } else {
/*  160 */       node.len = (offset - node.preNodesLen);
/*      */     }
/*  162 */     this.curNode = node;
/*      */     
/*      */ 
/*  165 */     boolean toRemove = false;
/*  166 */     this.bufferList.reset();
/*  167 */     BufferNode nextNode = (BufferNode)this.bufferList.getHead();
/*  168 */     while (nextNode != null) {
/*  169 */       if (!toRemove) {
/*  170 */         if (node == nextNode) {
/*  171 */           toRemove = true;
/*      */         }
/*  173 */         if (this.bufferList.hasNextObject()) {
/*  174 */           nextNode = (BufferNode)this.bufferList.nextNode();
/*      */         } else {
/*  176 */           nextNode = null;
/*      */         }
/*      */       }
/*  179 */       if (toRemove) {
/*  180 */         if (nextNode == null) break;
/*  181 */         if (this.bufferList.isEnd()) {
/*  182 */           nextNode = (BufferNode)this.bufferList.remove();
/*  183 */           break;
/*      */         }
/*      */         
/*  186 */         nextNode = (BufferNode)this.bufferList.remove();
/*      */       }
/*      */     }
/*      */     
/*      */ 
/*      */ 
/*  192 */     if (!included)
/*      */     {
/*  194 */       node = new BufferNode(destBuf);
/*  195 */       this.bufferList.addLast(node);
/*  196 */       this.curNode = node;
/*      */     }
/*      */   }
/*      */   
/*      */   public List getBufferList() {
/*  201 */     return this.bufferList;
/*      */   }
/*      */   
/*      */ 
/*      */   public byte[] getFirstBuffer()
/*      */   {
/*  207 */     BufferNode node = (BufferNode)this.bufferList.getHead();
/*      */     
/*  209 */     return node.buffer;
/*      */   }
/*      */   
/*      */   public BufferNode getFirstNode() {
/*  213 */     return (BufferNode)this.bufferList.getHead();
/*      */   }
/*      */   
/*      */   public BufferNode getNextNode() {
/*  217 */     return (BufferNode)this.bufferList.nextNode();
/*      */   }
/*      */   
/*      */   public BufferNode getCurNode() {
/*  221 */     return this.curNode;
/*      */   }
/*      */   
/*      */   public void addBufferNode(int size) {
/*  225 */     int destSize = this.nextBufferSize;
/*  226 */     if (this.bufferList.size() > 0) {
/*  227 */       destSize = this.nextBufferSize * 2;
/*      */     }
/*  229 */     if (destSize > 326400) {
/*  230 */       destSize = 326400;
/*      */     }
/*  232 */     if (destSize < size) {
/*  233 */       this.curNode = new BufferNode(size);
/*      */     } else {
/*  235 */       this.curNode = new BufferNode(destSize);
/*  236 */       this.nextBufferSize = destSize;
/*      */     }
/*      */     
/*  239 */     this.previousNode = this.bufferList.getTailNode();
/*      */     
/*  241 */     this.bufferList.addLast(this.curNode);
/*  242 */     this.nextNode = null;
/*      */   }
/*      */   
/*      */   public void addBufferNode() {
/*  246 */     if (this.bufferList.size() > 0) {
/*  247 */       this.nextBufferSize *= 2;
/*      */     }
/*  249 */     if (this.nextBufferSize > 326400) {
/*  250 */       this.nextBufferSize = 326400;
/*      */     }
/*  252 */     this.curNode = new BufferNode(this.nextBufferSize);
/*      */     
/*  254 */     this.previousNode = this.bufferList.getTailNode();
/*      */     
/*  256 */     this.bufferList.addLast(this.curNode);
/*  257 */     this.nextNode = null;
/*      */   }
/*      */   
/*      */   public byte[] getBuffer() {
/*  261 */     return this.curNode.buffer;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public void resetListPointer()
/*      */   {
/*  286 */     this.bufferList.reset();
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   private final void addBufferWhenApp(int len)
/*      */   {
/*  296 */     if (this.curNode.len + len > this.curNode.size)
/*      */     {
/*  298 */       if (this.nextNode == null) {
/*  299 */         addBufferNode(len);
/*      */       } else {
/*  301 */         List.Node tempNode = this.nextNode;
/*      */         
/*  303 */         this.curNode = ((BufferNode)tempNode.data);
/*      */         
/*  305 */         this.previousNode = tempNode.previous;
/*      */         
/*  307 */         this.nextNode = tempNode.next;
/*      */       }
/*      */     }
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public void appendByte(byte val)
/*      */   {
/*  320 */     addBufferWhenApp(1);
/*      */     
/*  322 */     fillByte(this.curNode, val, this.curNode.len);
/*      */   }
/*      */   
/*      */   private final int fillByte(BufferNode node, byte val, int nodeOff) {
/*  326 */     byte[] buffer = node.buffer;
/*      */     
/*  328 */     buffer[(nodeOff++)] = val;
/*      */     
/*  330 */     if (node.len < nodeOff) {
/*  331 */       node.len = nodeOff;
/*      */     }
/*  333 */     return 1;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public final int appendBytes(byte[] src, int src_offset, int len)
/*      */   {
/*  349 */     addBufferWhenApp(len);
/*      */     
/*  351 */     byte[] buffer = this.curNode.buffer;
/*  352 */     int offset = this.curNode.len;
/*      */     
/*  354 */     System.arraycopy(src, src_offset, buffer, offset, len);
/*      */     
/*  356 */     this.curNode.len += len;
/*      */     
/*  358 */     return len;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public final int appendBytesWithLen2(byte[] src, int src_offset, int len)
/*      */   {
/*  373 */     byte[] lenBuf = Convertion.shortToByteArray(len);
/*  374 */     appendBytes(lenBuf, 0, 2);
/*      */     
/*  376 */     appendBytes(src, src_offset, len);
/*      */     
/*  378 */     return len + 2;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public int appendBytesWithLen4(byte[] src, int src_offset, int len)
/*      */   {
/*  393 */     byte[] lenBuf = Convertion.IntToByteArray(len);
/*  394 */     appendBytes(lenBuf, 0, 4);
/*      */     
/*  396 */     appendBytes(src, src_offset, len);
/*      */     
/*  398 */     return len + 4;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public int appendOffRowBytes(byte[] src, int src_offset, int blen, boolean new_lob_flag, int clen)
/*      */   {
/*  419 */     int retLen = 0;
/*      */     
/*      */ 
/*  422 */     byte[] blenBuf = Convertion.IntToByteArray(blen);
/*  423 */     appendBytes(blenBuf, 0, 4);
/*  424 */     retLen += 4;
/*      */     
/*      */ 
/*  427 */     if (new_lob_flag) {
/*  428 */       byte[] clenBuf = Convertion.IntToByteArray(clen);
/*  429 */       appendBytes(clenBuf, 0, 4);
/*  430 */       retLen += 4;
/*      */     }
/*      */     
/*  433 */     retLen += appendBytes(src, src_offset, blen);
/*      */     
/*  435 */     return retLen;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   private final BufferNode findNodeByOffsetForSet(int offset, int len)
/*      */   {
/*  446 */     int preNodesLen = 0;
/*  447 */     int totalLen = 0;
/*  448 */     int nodesSize = 0;
/*  449 */     int maxOff = offset + len;
/*      */     
/*  451 */     this.bufferList.reset();
/*  452 */     BufferNode node = (BufferNode)this.bufferList.getHead();
/*  453 */     while (node != null) {
/*  454 */       nodesSize = preNodesLen + node.size;
/*      */       
/*      */ 
/*  457 */       if (nodesSize >= maxOff) break;
/*  458 */       if (this.bufferList.hasNextObject()) {
/*  459 */         preNodesLen += node.len;
/*      */         
/*  461 */         node = (BufferNode)this.bufferList.nextNode();
/*  462 */         node.preNodesLen = preNodesLen;
/*      */       }
/*      */       else {
/*  465 */         totalLen = node.preNodesLen + node.len;
/*  466 */         node = null;
/*  467 */         break;
/*      */       }
/*      */     }
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*  474 */     if (node == null) {
/*  475 */       addBufferNode(len);
/*  476 */       node = (BufferNode)this.bufferList.getTail();
/*  477 */       node.preNodesLen = totalLen;
/*      */     }
/*      */     
/*  480 */     return node;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   private final BufferNode findNodeByOffsetForGet(int offset)
/*      */   {
/*  491 */     int preNodesLen = 0;
/*  492 */     int nodesSize = 0;
/*  493 */     int maxOff = offset;
/*      */     
/*  495 */     this.bufferList.reset();
/*  496 */     BufferNode node = (BufferNode)this.bufferList.getHead();
/*  497 */     while (node != null) {
/*  498 */       nodesSize = preNodesLen + node.len;
/*      */       
/*      */ 
/*  501 */       if ((nodesSize > maxOff) || 
/*  502 */         (!this.bufferList.hasNextObject())) break;
/*  503 */       preNodesLen += node.len;
/*      */       
/*  505 */       node = (BufferNode)this.bufferList.nextNode();
/*      */     }
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*  514 */     return node;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public int setBytes(byte[] src, int src_offset, int offset, int len)
/*      */   {
/*  532 */     BufferNode node = findNodeByOffsetForSet(offset, len);
/*      */     
/*      */ 
/*  535 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*      */ 
/*  538 */     byte[] buffer = node.buffer;
/*  539 */     System.arraycopy(src, src_offset, buffer, nodeOff, len);
/*  540 */     nodeOff += len;
/*      */     
/*      */ 
/*  543 */     if (node.len < nodeOff) {
/*  544 */       node.len = nodeOff;
/*      */     }
/*  546 */     return len;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public int setBytesWithLen2(byte[] src, int src_offset, int offset, int len)
/*      */   {
/*  565 */     BufferNode node = findNodeByOffsetForSet(offset + 2, len);
/*      */     
/*      */ 
/*  568 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*  570 */     byte[] buffer = node.buffer;
/*      */     
/*  572 */     byte[] lenBuf = Convertion.shortToByteArray(len);
/*  573 */     System.arraycopy(lenBuf, 0, buffer, nodeOff, 2);
/*  574 */     nodeOff += 2;
/*      */     
/*      */ 
/*  577 */     System.arraycopy(src, src_offset, buffer, nodeOff, len);
/*  578 */     nodeOff += len;
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*  583 */     if (node.len < nodeOff) {
/*  584 */       node.len = nodeOff;
/*      */     }
/*      */     
/*      */ 
/*  588 */     return len + 2;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public int setBytesWithLen4(byte[] src, int src_offset, int offset, int len)
/*      */   {
/*  607 */     BufferNode node = findNodeByOffsetForSet(offset + 4, len);
/*      */     
/*      */ 
/*  610 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*  612 */     byte[] buffer = node.buffer;
/*      */     
/*  614 */     byte[] lenBuf = Convertion.IntToByteArray(len);
/*  615 */     System.arraycopy(lenBuf, 0, buffer, nodeOff, lenBuf.length);
/*  616 */     nodeOff += 4;
/*      */     
/*      */ 
/*  619 */     System.arraycopy(src, src_offset, buffer, nodeOff, len);
/*  620 */     nodeOff += len;
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*  625 */     if (node.len < nodeOff) {
/*  626 */       node.len = nodeOff;
/*      */     }
/*      */     
/*      */ 
/*  630 */     return len + 4;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public final void setCRC(byte crc)
/*      */   {
/*  641 */     byte[] ret = new byte[1];
/*  642 */     ret[0] = crc;
/*      */     
/*      */ 
/*  645 */     BufferNode node = (BufferNode)this.bufferList.getHead();
/*      */     
/*  647 */     byte[] buffer = node.buffer;
/*      */     
/*  649 */     System.arraycopy(ret, 0, buffer, 19, ret.length);
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public final int setString(String str, String serverEncoding, int offset)
/*      */     throws java.sql.SQLException
/*      */   {
/*  663 */     byte[] ret = Convertion.getBytes(str, serverEncoding);
/*  664 */     setBytes(ret, 0, offset, ret.length);
/*      */     
/*  666 */     return ret.length;
/*      */   }
/*      */   
/*      */   public final int setString(String str, String serverEncoding) throws java.sql.SQLException
/*      */   {
/*  671 */     byte[] ret = Convertion.getBytes(str, serverEncoding);
/*      */     
/*  673 */     appendBytes(ret, 0, ret.length);
/*      */     
/*  675 */     return ret.length;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public final int setStringWithNTS(String str, String serverEncoding, int offset)
/*      */     throws java.sql.SQLException
/*      */   {
/*  691 */     byte[] ret = Convertion.getBytes(str, serverEncoding);
/*  692 */     setBytes(ret, 0, offset, ret.length);
/*  693 */     setByte((byte)0, offset + ret.length);
/*      */     
/*  695 */     return ret.length + 1;
/*      */   }
/*      */   
/*      */   public final int setStringWithNTS(String str, String serverEncoding) throws java.sql.SQLException
/*      */   {
/*  700 */     byte[] ret = Convertion.getBytes(str, serverEncoding);
/*  701 */     byte[] val = new byte[1];
/*      */     
/*  703 */     val[0] = 0;
/*      */     
/*  705 */     appendBytes(ret, 0, ret.length);
/*  706 */     appendBytes(val, 0, 1);
/*      */     
/*  708 */     return ret.length + 1;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public final int setByte(byte val, int offset)
/*      */   {
/*  723 */     BufferNode node = findNodeByOffsetForSet(offset, 1);
/*      */     
/*      */ 
/*  726 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*      */ 
/*  729 */     fillByte(node, val, nodeOff);
/*      */     
/*  731 */     return 1;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   private final int fillShort(BufferNode node, int val, int nodeOff)
/*      */   {
/*  746 */     byte[] buffer = node.buffer;
/*      */     
/*  748 */     buffer[(nodeOff++)] = ((byte)(val & 0xFF));
/*  749 */     buffer[(nodeOff++)] = ((byte)(val >>> 8));
/*      */     
/*  751 */     if (node.len < nodeOff) {
/*  752 */       node.len = nodeOff;
/*      */     }
/*  754 */     return 2;
/*      */   }
/*      */   
/*      */   public final void setShort(int val) {
/*  758 */     addBufferWhenApp(2);
/*      */     
/*  760 */     fillShort(this.curNode, val, this.curNode.len);
/*      */   }
/*      */   
/*      */   public final void setShort(int val, int offset)
/*      */   {
/*  765 */     BufferNode node = findNodeByOffsetForSet(offset, 2);
/*      */     
/*      */ 
/*  768 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*      */ 
/*  771 */     fillShort(node, val, nodeOff);
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   private final int fillInt(BufferNode node, int val, int nodeOff)
/*      */   {
/*  786 */     byte[] buffer = node.buffer;
/*      */     
/*  788 */     buffer[(nodeOff++)] = ((byte)(val & 0xFF));
/*  789 */     buffer[(nodeOff++)] = ((byte)(val >>> 8 & 0xFF));
/*  790 */     buffer[(nodeOff++)] = ((byte)(val >>> 16 & 0xFF));
/*  791 */     buffer[(nodeOff++)] = ((byte)(val >>> 24 & 0xFF));
/*      */     
/*  793 */     if (node.len < nodeOff) {
/*  794 */       node.len = nodeOff;
/*      */     }
/*  796 */     return 4;
/*      */   }
/*      */   
/*      */   public final void setInt(int val) {
/*  800 */     addBufferWhenApp(4);
/*      */     
/*  802 */     fillInt(this.curNode, val, this.curNode.len);
/*      */   }
/*      */   
/*      */ 
/*      */   public final void setInt(int val, int offset)
/*      */   {
/*  808 */     BufferNode node = findNodeByOffsetForSet(offset, 4);
/*      */     
/*      */ 
/*  811 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*      */ 
/*  814 */     fillInt(node, val, nodeOff);
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   private final int fillLong(BufferNode node, long val, int nodeOff)
/*      */   {
/*  829 */     byte[] buffer = node.buffer;
/*      */     
/*  831 */     buffer[(nodeOff++)] = ((byte)(int)(val & 0xFF));
/*  832 */     buffer[(nodeOff++)] = ((byte)(int)(val >>> 8));
/*  833 */     buffer[(nodeOff++)] = ((byte)(int)(val >>> 16));
/*  834 */     buffer[(nodeOff++)] = ((byte)(int)(val >>> 24));
/*  835 */     buffer[(nodeOff++)] = ((byte)(int)(val >>> 32));
/*  836 */     buffer[(nodeOff++)] = ((byte)(int)(val >>> 40));
/*  837 */     buffer[(nodeOff++)] = ((byte)(int)(val >>> 48));
/*  838 */     buffer[(nodeOff++)] = ((byte)(int)(val >>> 56));
/*      */     
/*  840 */     if (node.len < nodeOff) {
/*  841 */       node.len = nodeOff;
/*      */     }
/*  843 */     return 8;
/*      */   }
/*      */   
/*      */   public final int appendNumWithLen2(long val, int numLen) throws java.sql.SQLException
/*      */   {
/*  848 */     addBufferWhenApp(2 + numLen);
/*  849 */     fillShort(this.curNode, numLen, this.curNode.len);
/*      */     
/*  851 */     switch (numLen) {
/*      */     case 1: 
/*  853 */       fillByte(this.curNode, (byte)(int)val, this.curNode.len);
/*  854 */       break;
/*      */     
/*      */     case 2: 
/*  857 */       fillShort(this.curNode, (int)val, this.curNode.len);
/*  858 */       break;
/*      */     
/*      */     case 4: 
/*  861 */       fillInt(this.curNode, (int)val, this.curNode.len);
/*  862 */       break;
/*      */     
/*      */     case 8: 
/*  865 */       fillLong(this.curNode, val, this.curNode.len);
/*  866 */       break;
/*      */     case 3: case 5: case 6: 
/*      */     case 7: default: 
/*  869 */       throw new java.sql.SQLException("Invalid Number value Length");
/*      */     }
/*      */     
/*  872 */     return 2 + numLen;
/*      */   }
/*      */   
/*      */   public final void setLong(long val, int offset)
/*      */   {
/*  877 */     BufferNode node = findNodeByOffsetForSet(offset, 8);
/*      */     
/*      */ 
/*  880 */     int nodeOff = offset - node.preNodesLen;
/*      */     
/*      */ 
/*  883 */     fillLong(node, val, nodeOff);
/*      */   }
/*      */   
/*      */   public void setParamDataLength(int len, int offset) {
/*  887 */     setShort(len, offset);
/*      */   }
/*      */   
/*      */   public void setParamDataLength(int len) {
/*  891 */     setShort(len);
/*      */   }
/*      */   
/*      */   public void setParamData(int offset, byte[] data) {
/*  895 */     setBytes(data, 0, offset, data.length);
/*      */   }
/*      */   
/*      */   public void setParamDataEx(byte[] data) {
/*  899 */     appendBytesWithLen2(data, 0, data.length);
/*      */   }
/*      */   
/*      */   public void resetCurNode() {
/*  903 */     this.bufferList.reset();
/*      */     
/*  905 */     this.curNode = ((BufferNode)this.bufferList.getHead());
/*  906 */     this.curNode.reset();
/*      */     
/*  908 */     System.arraycopy(this.initHead, 0, this.curNode.buffer, 0, this.initHead.length);
/*  909 */     this.curNode.len = this.initHead.length;
/*      */     
/*  911 */     this.nextNode = null;
/*  912 */     BufferNode node = null;
/*  913 */     while (this.bufferList.hasNextObject()) {
/*  914 */       if (this.nextNode == null) {
/*  915 */         this.nextNode = this.bufferList.next();
/*  916 */         node = (BufferNode)this.nextNode.data;
/*      */       } else {
/*  918 */         node = (BufferNode)this.bufferList.nextNode();
/*      */       }
/*      */       
/*  921 */       node.reset();
/*      */     }
/*      */     
/*  924 */     this.nextBufferSize = 32640;
/*      */   }
/*      */   
/*      */ 
/*      */   public void clear()
/*      */   {
/*  930 */     this.bufferList.removeAll();
/*      */   }
/*      */   
/*      */   public void req_startup_set_encrypt_type(int encrypt_type)
/*      */   {
/*  935 */     setInt(encrypt_type, 20);
/*      */   }
/*      */   
/*      */   public void req_startup_set_cmp_flag(int cmp_flag) {
/*  939 */     setInt(cmp_flag, 24);
/*      */   }
/*      */   
/*      */   public void req_startup_set_rs_bdta_flag(byte rs_bdta_flag) {
/*  943 */     setByte(rs_bdta_flag, 30);
/*      */   }
/*      */   
/*      */   public void req_startup_set_comm_enc_flag(byte comm_enc_flag) {
/*  947 */     setByte(comm_enc_flag, 29);
/*      */   }
/*      */   
/*      */   public void req_startup_set_gen_keypair_flag(byte gen_keypair_flag) {
/*  951 */     setByte(gen_keypair_flag, 28);
/*      */   }
/*      */   
/*      */   public void req_login_set_env(int env)
/*      */   {
/*  956 */     setInt(env, 20);
/*      */   }
/*      */   
/*      */   public void req_login_set_iso_level(int isoLevel) {
/*  960 */     setInt(isoLevel, 24);
/*      */   }
/*      */   
/*      */   public void req_login_set_language(int language) {
/*  964 */     setInt(language, 28);
/*      */   }
/*      */   
/*      */   public void req_login_set_read_only(byte readOnly) {
/*  968 */     setByte(readOnly, 32);
/*      */   }
/*      */   
/*      */   public void req_login_set_time_zone(short timeZone) {
/*  972 */     setShort(timeZone, 33);
/*      */   }
/*      */   
/*      */   public void req_login_set_session_timeout(int sessionTimeout) {
/*  976 */     setInt(sessionTimeout, 35);
/*      */   }
/*      */   
/*      */   public void req_login_set_mpp_login_type(byte mppLoginType) {
/*  980 */     setByte(mppLoginType, 39);
/*      */   }
/*      */   
/*      */   public void req_login_set_req_standby_flag(byte req_flag) {
/*  984 */     setByte(req_flag, 40);
/*      */   }
/*      */   
/*      */   public void nmsg_req_login_set_new_lob_flag(byte new_flag) {
/*  988 */     setByte(new_flag, 41);
/*      */   }
/*      */   
/*      */ 
/*      */   public void req_alloc_stmt_set_new_col_desc_flag(byte readBaseDesc)
/*      */   {
/*  994 */     setByte(readBaseDesc, 20);
/*      */   }
/*      */   
/*      */   public void req_prepare_set_auto_cmt(byte autoCmt)
/*      */   {
/*  999 */     setByte(autoCmt, 20);
/*      */   }
/*      */   
/*      */   public void req_prepare_set_exec_direct(byte execDirect) {
/* 1003 */     setByte(execDirect, 21);
/*      */   }
/*      */   
/*      */   public void req_prepare_set_param_sequ(byte paramSequ) {
/* 1007 */     setByte(paramSequ, 22);
/*      */   }
/*      */   
/*      */   public void req_prepare_set_cur_forward_only(byte forwardOnly) {
/* 1011 */     setByte(forwardOnly, 23);
/*      */   }
/*      */   
/*      */   public void req_prepare_set_check_type(byte checkType) {
/* 1015 */     setByte(checkType, 24);
/*      */   }
/*      */   
/*      */   public void req_prepare_set_sql_Type(short sqlType) {
/* 1019 */     setShort(sqlType, 25);
/*      */   }
/*      */   
/*      */   public void req_prepare_set_fetch_max(long fetchMax) {
/* 1023 */     setLong(fetchMax, 27);
/*      */   }
/*      */   
/*      */   public void req_prepare_ret_id_flag(byte flag) {
/* 1027 */     setByte(flag, 38);
/*      */   }
/*      */   
/*      */   public void req_prepare_rs_bdta_flag(byte rs_bdta_flag) {
/* 1031 */     setByte(rs_bdta_flag, 35);
/*      */   }
/*      */   
/*      */   public void req_prepare_bdta_len(short bdta_len) {
/* 1035 */     setShort(bdta_len, 36);
/*      */   }
/*      */   
/*      */   public void req_execute_set_auto_cmt(byte autoCmt)
/*      */   {
/* 1040 */     setByte(autoCmt, 20);
/*      */   }
/*      */   
/*      */   public void req_execute_set_param_num(short paramNum) {
/* 1044 */     setShort(paramNum, 21);
/*      */   }
/*      */   
/*      */   public void req_execute_set_cur_forward_only(byte curForwardOnly) {
/* 1048 */     setByte(curForwardOnly, 23);
/*      */   }
/*      */   
/*      */   public void req_execute_set_row_num(long rowNum) {
/* 1052 */     setLong(rowNum, 24);
/*      */   }
/*      */   
/*      */   public void req_execute_set_cur_pos(long curPos) {
/* 1056 */     setLong(curPos, 32);
/*      */   }
/*      */   
/*      */   public void req_execute_set_fetch_max(long fetchMax) {
/* 1060 */     setLong(fetchMax, 40);
/*      */   }
/*      */   
/*      */   public void req_execute_ret_id_flag(byte flag) {
/* 1064 */     setByte(flag, 48);
/*      */   }
/*      */   
/*      */   public void req_execute_ign_bp_err(byte ign_bp_err) {
/* 1068 */     setByte(ign_bp_err, 49);
/*      */   }
/*      */   
/*      */   public final long getInt(int offset) {
/* 1072 */     return Convertion.getUInt(getFromOffsetWithLen(offset, 4), 0);
/*      */   }
/*      */   
/*      */   public int req_get_len() {
/* 1076 */     return (int)getInt(6);
/*      */   }
/*      */   
/*      */   public void req_set_stmtid(int stmtid) {
/* 1080 */     setInt(stmtid, 0);
/*      */   }
/*      */   
/*      */   public void req_set_cmd(short cmd) {
/* 1084 */     setShort(cmd, 4);
/*      */   }
/*      */   
/*      */   public void req_set_len(int len) {
/* 1088 */     setInt(len, 6);
/*      */   }
/*      */   
/*      */   public void req_set_crc(byte crc) {
/* 1092 */     setByte(crc, 19);
/*      */   }
/*      */   
/*      */   public void req_set_compress(byte isCompress)
/*      */   {
/* 1097 */     setByte(isCompress, 18);
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public final byte calculateCRC()
/*      */   {
/* 1107 */     byte[] buffer = ((BufferNode)this.bufferList.getHead()).buffer;
/*      */     
/* 1109 */     byte crc = buffer[0];
/* 1110 */     byte times = 19;
/* 1111 */     byte single = buffer[1];
/*      */     
/* 1113 */     for (byte i = 1; i < times; i = (byte)(i + 1)) {
/* 1114 */       single = buffer[i];
/* 1115 */       crc = (byte)(crc ^ single);
/*      */     }
/* 1117 */     return crc;
/*      */   }
/*      */   
/*      */   public void req_preexec_set_param_num(short paramNum)
/*      */   {
/* 1122 */     setShort(paramNum, 20);
/*      */   }
/*      */   
/*      */   public void req_putdata_set_para_index(short paraIndex)
/*      */   {
/* 1127 */     setShort(paraIndex, 20);
/*      */   }
/*      */   
/*      */   public void req_fetch_set_cur_pos(long curPos)
/*      */   {
/* 1132 */     setLong(curPos, 20);
/*      */   }
/*      */   
/*      */   public void req_fetch_set_row_count(long rowCount) {
/* 1136 */     setLong(rowCount, 28);
/*      */   }
/*      */   
/*      */   public void req_fetch_set_res_id(short resId) {
/* 1140 */     setShort(resId, 36);
/*      */   }
/*      */   
/*      */   public int res_fetch_get_ret_count() {
/* 1144 */     return (int)getInt(28);
/*      */   }
/*      */   
/*      */   public void req_moreres_set_res_id(short resId)
/*      */   {
/* 1149 */     setShort(resId, 20);
/*      */   }
/*      */   
/*      */   public void req_sess_iso_set_level(int isoLevel)
/*      */   {
/* 1154 */     setInt(isoLevel, 20);
/*      */   }
/*      */   
/*      */   public void req_xa_set_xa_type(int xa_type)
/*      */   {
/* 1159 */     setInt(xa_type, 64);
/*      */   }
/*      */   
/*      */   public void req_xa_set_xid(int fmtId, int gTran, int bQual, byte[] xid) {
/* 1163 */     setInt(fmtId, 68);
/* 1164 */     setInt(gTran, 72);
/* 1165 */     setInt(bQual, 76);
/* 1166 */     setBytes(xid, 0, 80, xid.length);
/*      */   }
/*      */   
/*      */   public void req_xa_set_xa_flag(int flag) {
/* 1170 */     setInt(flag, 208);
/*      */   }
/*      */ }


/* Location:              D:\Program Files\DBMS_20150813\jdbc\Dm7JdbcDriver17.jar!\dm\jdbc\dbaccess\DmMsgSend.class
 * Java compiler version: 2 (46.0)
 * JD-Core Version:       0.7.1
 */